#!/usr/bin/env python
# -*- coding:utf-8 -*-
#1.简述编写类和执行类中方法的流程。

'''
#定义一个类
class Foo:
    #类中的方法
    def func(self):
        pass
    def inner(self):
        return 123
#实例化一个类对象
obj=Foo()
#使用对象调用类中的方法
obj.func()
#方法中有有返回值，创建一个变量接收
val=obj.inner()
print(val)  #123

'''

#2.简述面向对象三大特性?
'''
封装、继承、多态
'''
#3.将以下函数改成类的方式并调用 :

# def func(a1):
#     print(a1)
'''
class Foo:
    def fun(self,al):
        print(al)

obj=Foo()
obj.fun('梁冰寒')
'''

#4.面向对象中的self指的是什么?

'''
是指实例化的对象。下面示例中 self 就是obj


class Foo:
    #类中的方法
    def func(self):
        pass
    def inner(self):
        return 123
#实例化一个类对象
obj=Foo()
#使用对象调用类中的方法
obj.func()

'''
#5.以下代码体现面向对象的什么特点?
#
# class Person:
#     def __init__(self, name, age, gender):
#         self.name = name
#         self.age = age
#         self.gender = gender
#
#
#
# obj = Person('武沛齐', 18, '男')

'''
将函数反复使用的公共值，封装到对象中，体现了面向对象的封装特点
'''
#6.以下代码体现面向对象的 么特点?

class Message:
    def email(self):
        """
        发送邮件
        :return:
        """
        pass

    def msg(self):
        """
        发送短信
        :return:
        """
        pass

    def wechat(self):
        """
        发送微信
        :return:
        """
        pass
'''
将代码函数归类并放到同一类中，体现面向对象封装的特性
'''

#7.看代码写结果

# class Foo:
#     def func(self):
#         print('foo.func')
#
# obj = Foo()
# result = obj.func()
# print(result)
'''
#foo.func None
'''

#8.定义个类，其中有计算周长和面积的方法(圆的半径通过参数传递到初始化方法)。
'''
from math import pi
class circle:
    def __init__(self,r):
        self.r=r
    def girth(self):
        d=2*pi*int('%s'%(self.r))
        print(d)

    def are(self):
        area=pi*int('%s'%(self.r))**2
        print(area)
obj=circle(3)
obj.girth()
obj.are()
'''


#9.面向对象中为什么要有继承?
'''
可以解决多个类中有共同方法，重复编写代码的情况，可以互相调用，使用继承，就能避免重复编写代码，提高代码的可读性和重复利用性
'''

#10.Python继承时，查找成员的顺序遵循 么规则?
'''
1.确定self 到底是谁？
2.self是哪个类创建的，就从此类中查找，自己没有就找父类
'''
#11.看代码写结果
'''
class Base1:
    def f1(self):
        print('base1.f1')

    def f2(self):
        print('base1.f2')

    def f3(self):
        print('base1.f3')
        self.f1()


class Base2:
    def f1(self):
        print('base2.f1')


class Foo(Base1, Base2):
    def f0(self):
        print('foo.f0')
        self.f3()


obj = Foo()
obj.f0()
#foo.fo   base1.f3  base1.f1
'''
#12.看代码写结果:
'''
class Base:
    def f1(self):
        print('base.f1')

    def f3(self):
        self.f1()
        print('base.f3')


class Foo(Base):
    def f1(self):
        print('foo.f1')

    def f2(self):
        print('foo.f2')
        self.f3()


obj = Foo()
obj.f2()
#foo.f2   base.f1  base.f3
'''
#13.补充代码实现

'''
user_list = []  
while True: 
	user = input(“请输入用户名:”)  
	pwd = input(“请输入密码:”)  
	email = input(“请输入邮箱:”) 
'''
"""
# 需求
1. while循环提示 户输 : 户名、密码、邮箱(正则满 邮箱格式)
2. 为每个 户创建 个对象，并添加到 表中。
3. 当 表中的添加 3个对象后，跳出循环并以此循环打印所有 户的姓名和邮箱
"""
'''
#以前写法
user_list = []
while True:
    user = input('请输入用户名:')
    pwd = input('请输入密码:')
    email = input('请输入邮箱:')
    temp={'user':user,'pwd':pwd,'email':email}
    user_list.append(temp)
    len_count=len(user_list)
    if len_count==3:
        break
print(user_list)
'''
#面向对象写法
#先将数据封装到对象中
'''
class Person:
    def __init__(self,user,pwd,email):
        self.username=user
        self.pwdnum=pwd
        self.emailnum=email
user_list = []
while True:
    user = input('请输入用户名:')
    pwd = input('请输入密码:')
    email = input('请输入邮箱:')
    p=Person(user,pwd,email)
    user_list.append(p)
    len_count=len(user_list)
    if len_count==3:
        break
for item in user_list:
    temp = '用户名：%s，密码：%s，邮箱：%s'%(item.username,item.pwdnum,item.emailnum)
    print(temp)
'''

#14.补充代码:实现 户注册和登录。

class User:
    def __init__(self, name, pwd):
        self.name = name
        self.pwd = pwd


class Account:
    def __init__(self):
        # 用户列表，数据格式：[user对象，user对象，user对象]
        self.user_list = []

    def login(self):
        """
        用户登录，输入用户名和密码然后去self.user_list中校验用户合法性
        :return:
        """

        while True:
            user=input('请输入用户名（输入N/n退出）：')
            if user.upper()=='N':
                break
            psw = input('请输入密码：')
            for i in self.user_list:
                if i[0]==user and i[1]==psw :
                    print('登陆成功')
                else:
                    print('用户名或密码错误，请重新输入')
                    continue


    def register(self):
        """
        用户注册，每注册一个用户就创建一个user对象，然后添加到self.user_list中，表示注册成功。
        :return:
        """
        user_list=[]
        u=[]
        while True:
            user_name=input('请输入用户名（输入N/n退出）：')
            if user_name.upper()=='N':
                break
            for i in self.user_list:
                if i[0]==user_name:
                    print('账户已存在，请重新输入！')
                    continue
            u.append(user_name)
            psw_num=input('请输入密码：')
            u.append(psw_num)
            self.user_list.append(u)
            print('注册成功')





    def run(self):
        """
        主程序
        :return:
        """
        contend='''
        1.用户注册
        2.用户登录
        '''
        while True:
            print(contend)
            info={'1':self.register,'2':self.login}
            choice=input('输入选择的服务（输入N/n退出）：')
            if choice.upper()=='N':
                break
            func=info.get(choice)
            if not func:
                print('请重新输入')
                continue
            func()

if __name__ == '__main__':
    obj = Account()
    obj.run()
